package com.wtb.pub;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.wtb.domain.DataCache;
import com.wtb.qq.domain.QqOauth;
import com.wtb.rr.domain.RrOauth;
import com.wtb.utils.CookieManager;

@SuppressWarnings("serial")
public class LastServlet extends WtbBaseServlet {
	private static final Log log = LogFactory.getLog(LastServlet.class);
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		super.doPost(request, response);
		
		if (lastMap != null) {
			boolean qqflag= false;
			boolean rrflag = false;
			RrOauth rrOauth = (RrOauth) lastMap.get("rr");
			QqOauth qqOauth = (QqOauth) lastMap.get("qq");
			
			//当map的长度为2时
			if (lastMap.size() == 2 && rrOauth != null && qqOauth != null) {
				//ref为空 说明1、可能是第一次授权的是qq账户 2、第一次授权后发现此账户不存在系统中
				if (rrOauth.getRef() == null || "".equals(rrOauth.getRef())) {
					//判断是不是存在系统中 如果存在 说明rr为第二个授权的账户  更新数据库 并设置存在标志
					if (DataCache.rrmap.containsKey(rrOauth.getUni())){  
						updateRr(rrOauth, response);
						if (rrOauth == null) {
							response.sendRedirect("error?err_code=1002");
							return;
						}
						rrflag = true;
					}
				}else {
					rrflag = true;    //不为空 说明 第一次已被授权且存在数据库中
				}
				//同上
				if (qqOauth.getRef() == null || "".equals(qqOauth.getRef())) {
					if (DataCache.qqmap.containsKey(qqOauth.getUni())) {
						updateQq(qqOauth, response);
						if (qqOauth == null) {
							response.sendRedirect("error?err_code=1002");
							return;
						}
						qqflag = true;
					}
				}else {
					qqflag = true;
				}
				
				//根据标志判断账户绑定状态
				if (rrflag==true && qqflag==true) {         //两个账户都存在数据库中 可以关闭同步
					if (rrOauth.getR2q().equals("0")) {
						session.setAttribute("r2q", "open");
					}else {
						session.setAttribute("r2q", "close");
					}
					if (qqOauth.getQ2r().equals("0")) {
						session.setAttribute("q2r", "open");
					}else {
						session.setAttribute("q2r", "close");
					}
				}else if (rrflag==false && qqflag==false) { //两个账户都不存在 可以开启
					session.setAttribute("r2q", "open");
					session.setAttribute("q2r", "open");
				}else {
					session.setAttribute("status", "bound"); //一个存在 一个不存在 提示
				}
			}
			
			//当map的长度为1时，说明只授权了一个账号
			if (lastMap.size() == 1) {
				if (rrOauth != null) {  //如果授权的是人人账户
					if (DataCache.rrmap.containsKey(rrOauth.getUni())){
						rrOauth = updateRr(rrOauth, response);   //更新人人账户授权内容
						if (rrOauth == null) {
							response.sendRedirect("error?err_code=1002");
							return;
						}
						lastMap.put("rr", rrOauth);	             //把新的人人账户放入map并放入session
						session.setAttribute("lastMap", lastMap);
					}
				}
				if (qqOauth != null) {   //如果授权的是qq账户
					if (DataCache.qqmap.containsKey(qqOauth.getUni())) {
						qqOauth = updateQq(qqOauth, response);    //更新qq账户授权内容
						if (qqOauth == null) {
							response.sendRedirect("error?err_code=1002");
							return;
						}
						lastMap.put("qq", qqOauth);				  //把新的qq账户授权内容放入map并存入session
						session.setAttribute("lastMap", lastMap);
					}
				}
			}
		}
	
        CookieManager.getInstance().clearCookie(response, "xnsid", 0, "/", ".renren.com");
		response.sendRedirect("");
	}
	/**
	 * 更新人人授权内容
	 * @param rrOauth
	 * @param response
	 * @throws IOException
	 */
	private RrOauth updateRr(RrOauth rrOauth , HttpServletResponse response) throws IOException{
		RrOauth newrrOauth = DataCache.rrmap.get(rrOauth.getUni());
		rrOauth.setRef(newrrOauth.getRef());
		rrOauth.setR2q(newrrOauth.getR2q());
		try {
			rrDao.update(rrOauth);
			DataCache.synPutRrMap(rrOauth);
		} catch (Exception e) {
			log.error("修改人人信息错误：", e);
			return null;
		}
		return rrOauth;
	}
	/**
	 * 更新qq授权内容
	 * @param qqOauth
	 * @param response
	 * @throws IOException
	 */
	private QqOauth updateQq(QqOauth qqOauth ,HttpServletResponse response) throws IOException{
		QqOauth newqqOauth = DataCache.qqmap.get(qqOauth.getUni());
		qqOauth.setRef(newqqOauth.getRef());
		qqOauth.setQ2r(newqqOauth.getQ2r());
		try {
			qqDao.update(qqOauth);
			DataCache.synPutQqMap(qqOauth);
		} catch (Exception e) {
			log.error("修改qq信息错误：", e);
			return null;
		}
		return qqOauth;
	}
}
